# coding=utf-8


from . import api

from flask import request,current_app,jsonify,session

from iHome.utils.response_code import RET

from iHome.utils.storage_image import storage_image

from iHome.constants import QINIU_DOMIN_PREFIX


from iHome.models import User

from iHome import db
# 导入装饰器函数
from iHome.utils.common import login_required




@api.route("/user")
@login_required
def get_user_info():
    '''
    1,判断是否登录并且获取到当前登录用户的id
    2，查询数据
    3，将用户模型指定的数据进行指定格式返回
    :return:
    '''

    user_id=session.get("user_id")

    # 2,查询数据
    try:
        user=User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="查询数据错误")

    if not user:
        return jsonify(errno=RET.USERERR,errmsg="用户不存在")


    # 3，返回数据,将要返回的数据封装成 一个字典返回，而不能返回一个对象，不支持这种格式
    resp_data={
        "user_id":user_id,
        "avatar_url": QINIU_DOMIN_PREFIX + user.avatar_url,
        "name":user.name
    }

    return jsonify(errno=RET.OK,errmsg="OK",data=resp_data)



@api.route("/user/name",methods=["POST"])
@login_required
def set_user_name():
    '''
    1,TODO 判断是否登录
    2，获取到传入的名字参数，并判断是否为空
    3，获取到当前用户登录的id并查询出对应的模型
    4，更新模型
    5，返回结果
    :return:
    '''
    #1TODO判断是否登录


    #2，获取到传入名字参数，并判断是否为空
    data_dict=request.json

    name=data_dict.get("name")
    if not name:
        return jsonify(errno=RET.PARAMERR,errmsg="参数不全")

    # 3，获取到当前用户登录的id并查询出对应的模型
    user_id=session.get("user_id")

    try:
        # 注意数据库表中的user_id保存的是整数类型，而不是字符串所以不能用引号将“user_id”括起来查找。
        user=User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="查询数据失败")

    if not user:
        return jsonify(errno=RET.USERERR,errmsg="用户不存在")


    # 4，更新模型
    try:
        user.name=name
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="保存用户名失败")

    # 更新session中的用户名
    session["name"]=name

    # 5，返回结果
    return jsonify(errno=RET.OK,errmsg="修改成功")






@api.route("/user/avatar",methods=["POST"])
@login_required
def upload_avatar():
    '''
    1,TODO 判断是否登录
    2，获取要上传的文件内容
    3，上传到七牛云
    4，返回上传成功的七牛云地址
    :return:
    '''


    # 1.TODO 判断是否登录

    # 2，获取要上传的文件内容
    # 如果只请求这一个路径，而不传图片内容的话，是会报错的，阻塞程序，所以在获取文件内容上面包装一条try语句
    try:
        avatar_file=request.files.get("avatar").read()
    except Exception as e:

        current_app.logger.error(e)
        return jsonify(errno=RET.PARAMERR,errmsg="请选择图片")

    # 3,上传到七牛云
    try:
        key=storage_image(avatar_file)
    except Exception as e:
        current_app.logger.error(e)
        # THIRDERR是第三方平台错误
        return jsonify(errno=RET.THIRDERR,errmsg="上传七牛云失败")


    # 4,取到用户User模型，将上传成功的头像的地址保存到模型中并更新数据库
    try:
        user=User.query.get(session["user_id"])
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="查询当前登录用户失败")


    if not user:
        return jsonify(errno=RET.USERERR,errmsg="用户不存在")

    user.avatar_url=key

    try:
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        db.session.rollBack()
        return jsonify(errno=RET.DBERR,errmsg="保存用户头像失败")



    # 5，返回上传成功的图片地址
    return jsonify(errno=RET.OK,errmsg="上传成功",data={"avatar_url":QINIU_DOMIN_PREFIX + key})
































